import Vue from 'vue';
import Router from 'vue-router';

Vue.use(Router);

/* Layout */
import Layout from '@/layout';

/**
 * Note: 路由配置项
 *
 * hidden: true                     // 当设置 true 的时候该路由不会再侧边栏出现 如401，login等页面，或者如一些编辑页面/edit/1
 * alwaysShow: true                 // 当你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面
 *                                  // 只有一个时，会将那个子路由当做根路由显示在侧边栏--如引导页面
 *                                  // 若你想不管路由下面的 children 声明的个数都显示你的根路由
 *                                  // 你可以设置 alwaysShow: true，这样它就会忽略之前定义的规则，一直显示根路由
 * redirect: noRedirect             // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
 * name:'router-name'               // 设定路由的名字，一定要填写不然使用<keep-alive>时会出现各种问题
 * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数
 * roles: ['admin', 'common']       // 访问路由的角色权限
 * permissions: ['a:a:a', 'b:b:b']  // 访问路由的菜单权限
 * meta : {
    noCache: true                   // 如果设置为true，则不会被 <keep-alive> 缓存(默认 false)
    title: 'title'                  // 设置该路由在侧边栏和面包屑中展示的名字
    icon: 'svg-name'                // 设置该路由的图标，对应路径src/assets/icons/svg
    breadcrumb: false               // 如果设置为false，则不会在breadcrumb面包屑中显示
    activeMenu: '/system/user'      // 当路由设置了该属性，则会高亮相对应的侧边栏。
  }
 */

// 公共路由
export const constantRoutes = [
  {
    path: '/redirect',
    component: Layout,
    hidden: true,
    children: [
      {
        path: '/redirect/:path(.*)',
        component: () => import('@/views/redirect'),
      },
    ],
  },
  {
    path: '/login',
    component: () => import('@/views/login'),
    hidden: true,
  },

  {
    path: '/register',
    component: () => import('@/views/register'),
    hidden: true,
  },
  {
    path: '/404',
    component: () => import('@/views/error/404'),
    hidden: true,
  },
  {
    path: '/401',
    component: () => import('@/views/error/401'),
    hidden: true,
  },
  {
    path: '',
    component: Layout,
    redirect: 'index',
    children: [
      {
        path: 'index',
        component: () => import('@/views/index'),
        name: 'Index',
        meta: { title: '首页', icon: 'dashboard', affix: true },
      },
    ],
  },
  {
    path: '/user',
    component: Layout,
    hidden: true,
    redirect: 'noredirect',
    children: [
      {
        path: 'profile',
        component: () => import('@/views/system/user/profile/index'),
        name: 'Profile',
        meta: { title: '个人中心', icon: 'user' },
      },
    ],
  },
];

// 动态路由，基于用户权限动态去加载
export const dynamicRoutes = [
  {
    path: '/system/user-auth',
    component: Layout,
    hidden: true,
    permissions: ['system:user:edit'],
    children: [
      {
        path: 'role/:userId(\\d+)',
        component: () => import('@/views/system/user/authRole'),
        name: 'AuthRole',
        meta: { title: '分配角色', activeMenu: '/system/user' },
      },
    ],
  },
  {
    path: '/system/role-auth',
    component: Layout,
    hidden: true,
    permissions: ['system:role:edit'],
    children: [
      {
        path: 'user/:roleId(\\d+)',
        component: () => import('@/views/system/role/authUser'),
        name: 'AuthUser',
        meta: { title: '分配用户', activeMenu: '/system/role' },
      },
    ],
  },
  {
    path: '/organ/groupOrgan-data',
    component: Layout,
    hidden: true,
    permissions: ['organ:seminar:check'],
    children: [{
      path: 'index/:activityId',
      component: (resolve) => require(['@/views/organ/groupOrgan/data'], resolve),
      name: 'activity',
      meta: { title: '社团活动 / 活动详情', icon: '' }
    }]
  },
  {
    path: '/approval/organMan-data',
    component: Layout,
    hidden: true,
    permissions: ['approval:organMan'],
    children: [
      {
        path: 'index/:pid',
        component: () => import('@/views/approval/organMan/data'),
        name: 'Data',
        meta: { title: '组织管理详情' },
      },
    ],
  },
  {
    path: '/organ/studentUnionOrgan-data',
    component: Layout,
    hidden: true,
    permissions: ['organ:studentUnionOrgan:index'],
    children: [
      {
        path: 'index/:pid',
        component: () => import('@/views/organ/studentUnionOrgan/data'),
        name: 'Data',
        meta: { title: '学生组织详情' },
      },
    ],
  },
  {
    path: '/organ/studentOrgan-data',
    component: Layout,
    hidden: true,
    permissions: ['organ:studentOrgan:index'],
    children: [
      {
        path: 'index/:pid',
        component: () => import('@/views/organ/studentOrgan/data'),
        name: 'Data',
        meta: { title: '学生社团详情' },
      },
    ],
  },
  {
    path: '/system/forTeacher-pdf',
    component: Layout,
    hidden: true,
    permissions: ['system:forTeacher:index'],
    children: [
      {
        path: 'index/:forTeacherId(\\d+)',
        component: () => import('@/views/system/forTeacher/pdfvue'),
        name: 'Data',
        meta: { title: '外聘教师表格', activeMenu: '/system/forTeacher' },
      },
    ],
  },
  {
    path: '/system/dict-data',
    component: Layout,
    hidden: true,
    permissions: ['system:dict:list'],
    children: [
      {
        path: 'index/:dictId(\\d+)',
        component: () => import('@/views/system/dict/data'),
        name: 'Data',
        meta: { title: '字典数据', activeMenu: '/system/dict' },
      },
    ],
  },
  {
    path: '/monitor/job-log',
    component: Layout,
    hidden: true,
    permissions: ['monitor:job:list'],
    children: [
      {
        path: 'index',
        component: () => import('@/views/monitor/job/log'),
        name: 'JobLog',
        meta: { title: '调度日志', activeMenu: '/monitor/job' },
      },
    ],
  },
  {
    path: '/tool/gen-edit',
    component: Layout,
    hidden: true,
    permissions: ['tool:gen:edit'],
    children: [
      {
        path: 'index/:tableId(\\d+)',
        component: () => import('@/views/tool/gen/editTable'),
        name: 'GenEdit',
        meta: { title: '修改生成配置', activeMenu: '/tool/gen' },
      },
    ],
  },
  {
    path: '/activity/activity-detail',
    component: Layout,
    hidden: true,
    permissions: ['activity:seminar:check1'],
    children: [{
      path: 'index/:activityId',
      component: (resolve) => require(['@/views/activity/manager/activityDetail'], resolve),
      name: 'activity',
      meta: { title: '文体活动 / 活动详情', icon: '' }
    }]
  },
  {
    path: '/activity1/activity-detail',
    component: Layout,
    hidden: true,
    permissions: ['activity1:seminar:check1'],
    children: [{
      path: 'index/:activityId',
      component: (resolve) => require(['@/views/activity1/manager/activityDetail'], resolve),
      name: 'activity',
      meta: { title: '作品上传', icon: '' }
    }]
  },
  {
    path: '/education/activity-detail',
    component: Layout,
    hidden: true,
    permissions: ['education:seminar:check1'],
    children: [{
      path: 'index/:activityId',
      component: (resolve) => require(['@/views/education/manager/activityDetail'], resolve),
      name: 'education',
      meta: { title: '主题教育 / 活动详情', icon: '' }
    }]
  },
  {
    path: '/volunteer/activity-detail',
    component: Layout,
    hidden: true,
    permissions: ['volunteer:seminar:check1'],
    children: [{
      path: 'index/:activityId',
      component: (resolve) => require(['@/views/volunteer/manager/activityDetail'], resolve),
      name: 'volunteer',
      meta: { title: '志愿服务 / 活动详情', icon: '' }
    }]
  },
  {
    path: '/activity',
    component: Layout,
    hidden: true,
    permissions: ['activity:seminar:check'],
    children: [{
      path: '/activity/createActivity',
      component: (resolve) => require(['@/views/activity/manager/createActivity'], resolve),
      name: 'activity',
      meta: { title: '创建活动', icon: '' }
    }]
  },
  {
    path: '/activity1',
    component: Layout,
    hidden: true,
    permissions: ['activity1:seminar:check'],
    children: [{
      path: '/activity1/createActivity',
      component: (resolve) => require(['@/views/activity1/manager/createActivity'], resolve),
      name: 'activity',
      meta: { title: '创建活动', icon: '' }
    }]
  },
  {
    path: '/education',
    component: Layout,
    hidden: true,
    permissions: ['education:seminar:check'],
    children: [{
      path: '/education/createActivity',
      component: (resolve) => require(['@/views/education/manager/createActivity'], resolve),
      name: 'education',
      meta: { title: '创建活动', icon: '' }
    }]
  },
  {
    path: '/volunteer',
    component: Layout,
    hidden: true,
    permissions: ['volunteer:seminar:check'],
    children: [{
      path: '/volunteer/createActivity',
      component: (resolve) => require(['@/views/volunteer/manager/createActivity'], resolve),
      name: 'volunteer',
      meta: { title: '创建活动', icon: '' }
    }]
  },
  {
    path: '/activity',
    component: Layout,
    hidden: true,
    permissions: ['activity:manager:index'],
    children: [{
      path: 'supplierAllBack',
      component: (resolve) => require(['@/views/activity/manager/supplierAllBack'], resolve),
      name: 'activity',
      meta: { title: '/', icon: '' }
    }]
  },
  // {
  //   path: '/volunteer/recruit-time',
  //   component: Layout,
  //   hidden: true,
  //   permissions: ['volunteer:recruit:time'],
  //   children: [
  //     {
  //       path: 'list',
  //       component: (resolve) => require(['@/views/volunteer/recruitActivity/recruitTime'], resolve),
  //       name: 'list',
  //       meta: { title: '面试时间段', icon: '' }
  //     }
  //   ]
  // },
  {
    path: '/team',
    component: Layout,
    hidden: true,
    permissions: ['eqxm:team:index'],
    children: [{
      path: 'teamManage',
      component: (resolve) => require(['@/views/eqxm/team/teamManage'], resolve),
      name: 'team',
      meta: { title: '团队管理', icon: '' }
    },
    {
      path: 'upload',
      component: (resolve) => require(['@/views/eqxm/team/upload'], resolve),
      name: 'team',
      meta: { title: '上传', icon: '' }
    }]
  },
  {
    path: '/schoolmatch',
    component: Layout,
    hidden: true,
    permissions: ['eqxm:schoolmatch:index'],
    meta: { title: '优秀团队评审', icon: '' },
    children: [{
      path: 'recommendTeam',
      component: (resolve) => require(['@/views/eqxm/schoolmatch/recommendTeam'], resolve),
      name: 'recommendTeam',
      meta: { title: '推荐团队', icon: '' }
    }, {
      path: 'judge',
      component: (resolve) => require(['@/views/eqxm/schoolmatch/judge'], resolve),
      name: 'judge',
      meta: { title: '评委任命', icon: '' }
    }, {
      path: 'review',
      component: (resolve) => require(['@/views/eqxm/schoolmatch/review'], resolve),
      name: 'review',
      meta: { title: '评委任命', icon: '' }
    },
    {
      path: 'collegeScore',
      component: (resolve) => require(['@/views/eqxm/schoolmatch/collegeScore'], resolve),
      name: 'collegeScore',
      meta: { title: '学院评审成绩', icon: '' }
    },
    {
      path: 'teamManage',
      component: (resolve) => require(['@/views/eqxm/schoolmatch/teamManage'], resolve),
      name: 'team',
      meta: { title: '团队信息', icon: '' }
    },
    {
      path: 'seeUpload/:uploadId(\\d+)',
      component: (resolve) => require(['@/views/eqxm/schoolmatch/seeUpload'], resolve),
      name: 'review',
      meta: { title: '查看上传材料', icon: '' }
    }]
  },
  {
    path: '/schoolmatchScore',
    component: Layout,
    hidden: true,
    permissions: ['eqxm:schoolmatchScore:index'],
    children: [{
      path: 'recommendTeam',
      component: (resolve) => require(['@/views/eqxm/schoolmatchScore/recommendTeam'], resolve),
      name: 'recommendTeam',
      meta: { title: '推荐团队', icon: '' }
    }, {
      path: 'judge',
      component: (resolve) => require(['@/views/eqxm/schoolmatchScore/judge'], resolve),
      name: 'judge',
      meta: { title: '评委任命', icon: '' }
    }, {
      path: 'review',
      component: (resolve) => require(['@/views/eqxm/schoolmatchScore/review'], resolve),
      name: 'review',
      meta: { title: '评委任命', icon: '' }
    },
    {
      path: 'collegeScore',
      component: (resolve) => require(['@/views/eqxm/schoolmatchScore/collegeScore'], resolve),
      name: 'collegeScore',
      meta: { title: '学院评审成绩', icon: '' }
    },
    {
      path: 'teamManage',
      component: (resolve) => require(['@/views/eqxm/schoolmatchScore/teamManage'], resolve),
      name: 'team',
      meta: { title: '团队信息', icon: '' }
    },
    {
      path: 'seeUpload/:uploadId(\\d+)',
      component: (resolve) => require(['@/views/eqxm/schoolmatchScore/seeUpload'], resolve),
      name: 'review',
      meta: { title: '查看上传材料', icon: '' }
    }]
  },
  {
    path: '/schoolmatchRecommend',
    component: Layout,
    hidden: true,
    permissions: ['eqxm:schoolmatchRecommend:index'],
    children: [{
      path: 'recommendTeam',
      component: (resolve) => require(['@/views/eqxm/schoolmatchRecommend/recommendTeam'], resolve),
      name: 'recommendTeam',
      meta: { title: '推荐团队', icon: '' }
    }, {
      path: 'judge',
      component: (resolve) => require(['@/views/eqxm/schoolmatchRecommend/judge'], resolve),
      name: 'judge',
      meta: { title: '评委任命', icon: '' }
    }, {
      path: 'review',
      component: (resolve) => require(['@/views/eqxm/schoolmatchRecommend/review'], resolve),
      name: 'review',
      meta: { title: '评委任命', icon: '' }
    },
    {
      path: 'collegeScore',
      component: (resolve) => require(['@/views/eqxm/schoolmatchRecommend/collegeScore'], resolve),
      name: 'collegeScore',
      meta: { title: '学院评审成绩', icon: '' }
    },
    {
      path: 'teamManage',
      component: (resolve) => require(['@/views/eqxm/schoolmatchRecommend/teamManage'], resolve),
      name: 'team',
      meta: { title: '团队信息', icon: '' }
    },
    {
      path: 'seeUpload/:uploadId(\\d+)',
      component: (resolve) => require(['@/views/eqxm/schoolmatchRecommend/seeUpload'], resolve),
      name: 'review',
      meta: { title: '查看上传材料', icon: '' }
    }]
  },
  {
    path: '/advanced',
    component: Layout,
    hidden: true,
    permissions: ['eqxm:advanced:index'],
    children: [{
      path: 'apply',
      component: (resolve) => require(['@/views/eqxm/advanced/apply'], resolve),
      name: 'apply',
      meta: { title: '申请先进个人', icon: '' }
    },
    {
      path: 'look/:teamStudentId(\\d+)',
      component: (resolve) => require(['@/views/eqxm/advanced/look'], resolve),
      name: 'look',
      meta: { title: '查看资料', icon: '' }
    },
    {
      path: 'lookStudent/:teamStudentId(\\d+)',
      component: (resolve) => require(['@/views/eqxm/advanced/lookStudent'], resolve),
      name: 'lookStudent',
      meta: { title: '查看资料', icon: '' }
    }, {
      path: 'rank',
      component: (resolve) => require(['@/views/eqxm/advanced/rank'], resolve),
      name: 'rank',
      meta: { title: '录入排名', icon: '' }
    },]
  },
  {
    path: '/credit',
    component: Layout,
    hidden: true,
    permissions: ['eqxm:credit:index'],
    children: [{
      path: 'apply',
      component: (resolve) => require(['@/views/eqxm/credit/apply'], resolve),
      name: 'apply',
      meta: { title: '申请先进个人', icon: '' }
    },
    {
      path: 'look/:teamStudentId(\\d+)',
      component: (resolve) => require(['@/views/eqxm/credit/look'], resolve),
      name: 'look',
      meta: { title: '查看资料', icon: '' }
    },
    {
      path: 'lookStudent/:teamStudentId(\\d+)',
      component: (resolve) => require(['@/views/eqxm/credit/lookStudent'], resolve),
      name: 'lookStudent',
      meta: { title: '查看资料', icon: '' }
    }, {
      path: 'rank',
      component: (resolve) => require(['@/views/eqxm/credit/rank'], resolve),
      name: 'rank',
      meta: { title: '录入排名', icon: '' }
    },
    ]
  },
  {
    path: '/hd/recruit',
    component: Layout,
    hidden: true,
    permissions: ['hd:recruit:list'],
    children: [
      {
        path: 'form',
        component: (resolve) => require(['@/views/hd/recruit/form'], resolve),
        name: 'form',
        meta: { title: '报名表', icon: '' }
      }
    ]
  },
  {
    path: '/reportcard/cardPdf',
    component: Layout,
    hidden: true,
    permissions: ['reportcard:card:list'],
    children: [
      {
        path: 'index/:userName',
        component: (resolve) => require(['@/views/reportcard/cardPdf/index'], resolve),
        name: 'cardPdf',
        meta: { title: '成绩单', icon: '' }
      }
    ]
  },
  {
    path: '/examined',
    component: Layout,
    hidden: true,
    permissions: ['examined:list'],
    children: [
      {
        path: 'meterialFile',
        component: (resolve) => require(['@/views/examined/meterialFile'], resolve),
        name: 'examined',
        meta: { title: '年审材料', icon: '' }
      }
    ]
  },
  {
    path: '/workflow/dynamicFormDesigner',
    component: Layout,
    hidden: true,
    permissions: ['workflow:dynamicForm:edit'],
    children: [
      {
        path: ':id(\\d+)',
        component: () => import('@/views/workflow/dynamicForm/dynamicFormDesigner'),
        name: 'dynamicFormDesigner',
        meta: { title: '设计表单', activeMenu: '/workflow/dynamicForm' }
      }
    ]
  }
];

// 防止连续点击多次路由报错
let routerPush = Router.prototype.push;
Router.prototype.push = function push(location) {
  return routerPush.call(this, location).catch(err => err);
};

export default new Router({
  mode: 'history', // 去掉url中的#
  // mode: 'hash',
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes,
});
